package linguaggio;

import java.util.Objects;
import java.util.Vector;
import linguaggio.AttributeType.tokenType;

/**
 * La classe contiene i non terminali, comprese le loro produzioni.
 * @author Giovanni Cammarata
 */
public class NonTerminale extends Element {

    private Vector<Produzione> produzioni;

    public NonTerminale() {
    }

    public NonTerminale(String name) {
        super(name);
        produzioni = new Vector<>();

    }

    public NonTerminale(String name, tokenType thisTokenType) {
        super(name);
        super.setThisTokenType(thisTokenType);
        produzioni = new Vector<>();

    }

    public NonTerminale(String name, tokenType thisTokenType, String typeAttribute) {
        super(name, thisTokenType, typeAttribute);
        produzioni = new Vector<>();
    }

    public Vector<Produzione> getProduzioni() {
        return produzioni;
    }

    public void addProduzione(Produzione produzione) {
        produzioni.add(produzione);
    }

    @Override
    public String toString() {
        return getName();
    }

    @Override
    public boolean equals(Object obj) {
        if(obj == null && this != null)return false;
        if(obj == null && this == null) return true;
        if (obj.getClass().equals(this.getClass())) {
            NonTerminale nt = (NonTerminale) obj;
            if (nt.getName().equals(this.getName())
                    && nt.getThisTokenType().equals(this.getThisTokenType())
                    ) {
                return true;
            } else {
                return false;
            }
        } else {
            return super.equals(obj);
        }
    }

    @Override
    public int hashCode() {
        int hash = 5;
        hash = 83 * hash + Objects.hashCode(this.produzioni);
        return hash;
    }
}
